<?php

/**
 * courrier_electronique actions.
 *
 * @package    tfe
 * @subpackage courrier_electronique
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class courrier_electroniqueActions extends autoCourrier_electroniqueActions {

    protected function processForm(sfWebRequest $request, sfForm $form) {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        if ($form->isValid()) {
            $notice = $form->getObject()->isNew() ? 'The item was created successfully.' : 'The item was updated successfully.';

            $courrier_electronique = $form->save();

            // ENVOI !!
            $this->send($courrier_electronique);

            $this->dispatcher->notify(new sfEvent($this, 'admin.save_object', array('object' => $courrier_electronique)));

            if ($request->hasParameter('_save_and_add')) {
                $this->getUser()->setFlash('notice', $notice.' You can add another one below.');

                $this->redirect('@courrier_electronique_new');
            }
            else {
                $this->getUser()->setFlash('notice', $notice);

                $this->redirect(array('sf_route' => 'courrier_electronique_edit', 'sf_subject' => $courrier_electronique));
            }
        }
        else {
            $this->getUser()->setFlash('error', 'The item has not been saved due to some errors.', false);
        }
    }

//    public function executeListSend(sfWebRequest $request) {
//        $courrier_electronique = Doctrine::getTable('CourrierElectronique')->find($request->getParameter('id'));
//
//        // selon que l'objet est nouveau ou non, on le passe au constructeur du formulaire
//        $this->form = null;
//        if(NULL === $courrier_electronique) {
//            $this->form = new CourrierElectroniqueForm();
//        }else {
//            $this->form = new CourrierElectroniqueForm($courrier_electronique);
//        }
//        // traiter le dormulaire et envoyer le mail
//        $this->processFormAndSend($request, $this->form);
//    }



    public function send($courrier_electronique) {
        // variable tableau des noms et adresses correspondantes
        $liste_noms = array();
        // liste permettant d'éviter les doublons
        $liste_adresses = array();
        // liste des ids pour enregistrer la communication
        $liste_ids = array();
        // variable indice et qui comptabilise la quantité
        $nb=0;

        $contacts = $courrier_electronique->getContactsDestinataires();
        foreach($contacts as $contact) {
            $adresses = $contact->getEmails();
            if($adresses != null) {
                $adresse=$adresses[0]->getValeur();
                if(! in_array($adresse, $liste_adresses)) {
                    $liste_noms[$nb] =  $contact->getPrenom() .' '. $contact->getNom();
                    $liste_adresses[$nb] = $adresse;
                    $liste_ids[$nb] = $contact->getId();
                    $nb++;
                }
            }
        }
        $groupes = $courrier_electronique->getGroupesDestinataires();
        $ids_groupes = array();
        foreach($groupes as $groupe) {
            $adresse = $groupe->getMail();
            if($adresse !=  null) {
                if(! in_array($adresse, $liste_adresses)) {
                    $liste_noms[$nb] =  $groupe->getLibelle();
                    $liste_adresses[$nb] = $adresse;
                    $liste_ids[$nb] = $groupe->getId();
                    $ids_groupes = array_push($ids_groupes,$groupe->getId());
                    $nb++;
                }
            }
        }
        $abonnements = $courrier_electronique->getAbonnementsDestinataires();
        foreach($abonnements as $abonnement) {
            $inscriptions = $abonnement->getInscriptions();
            foreach($inscriptions as $inscription) {
                $contact = $inscription->getContact();
                $adresses = $contact->getEmails();
                $adresse = $adresses[0]->getValeur();
                if(! in_array($adresse, $liste_adresses)) {
                    $liste_noms[$nb] =  $contact->getPrenom() .' '. $contact->getNom();
                    $liste_adresses[$nb] = $adresse;
                    $liste_ids[$nb] = $contact->getId();
                    $nb++;
                }
            }
        }
        $ateliers = $courrier_electronique->getAteliersDestinataires();
        foreach($ateliers as $atelier) {
            $inscriptions = $atelier->getInscriptions();
            foreach($inscriptions as $inscription) {
                $contact = $inscription->getContact();
                $adresses = $contact->getEmails();
                $adresse = $adresses[0]->getValeur();
                if(! in_array($adresse, $liste_adresses)) {
                    $liste_noms[$nb] =  $contact->getPrenom() .' '. $contact->getNom();
                    $liste_adresses[$nb] = $adresse;
                    $liste_ids[$nb] = $contact->getId();
                    $nb++;
                }
            }
        }
        $stages = $courrier_electronique->getStagesDestinataires();
        foreach($stages as $stage) {
            $inscriptions = $stage->getInscriptions();
            foreach($inscriptions as $inscription) {
                $contact = $inscription->getContact();
                $adresses = $contact->getEmails();
                $adresse = $adresses[0]->getValeur();
                if(! in_array($adresse, $liste_adresses)) {
                    $liste_noms[$nb] =  $contact->getPrenom() .' '. $contact->getNom();
                    $liste_adresses[$nb] = $adresse;
                    $liste_ids[$nb] = $contact->getId();
                    $nb++;
                }
            }
        }
        $newsletters = $courrier_electronique->getNewslettersDestinataires();
        foreach($newsletters as $newsletter) {
            $contacts = $newsletter->getContacts();
            foreach($contacts as $contact) {
                $adresses = $contact->getEmails();
                $adresse = $adresses[0]->getValeur();
                if(! in_array($adresse, $liste_adresses)) {
                    $liste_noms[$nb] =  $contact->getPrenom() .' '. $contact->getNom();
                    $liste_adresses[$nb] = $adresse;
                    $liste_ids[$nb] = $contact->getId();
                    $nb++;
                }
            }
        }


        // Envoyer les mails
        $expediteur = array('evaint.isat@gmail.com'=>'Tristan Evain');
        for($i=0;$i<$nb;$i++) {
            $message = null;
            $destinataire = array($liste_adresses[$i] => $liste_noms[$i]);

            if($courrier_electronique->getPieceJointe() != null) {
                $message = $this->getMailer()
                        ->compose(
                        $expediteur,
                        $destinataire,
                        $courrier_electronique->getObjet(),
                        $courrier_electronique->getMessage())
                        ->attach(Swift_Attachment::fromPath('/uploads/'. $courrier_electronique->getPieceJointe()));
            }else {
                $message = $this->getMailer()
                        ->compose(
                        $expediteur,
                        $destinataire,
                        $courrier_electronique->getObjet(),
                        $courrier_electronique->getMessage());
            }
            $message->setContentType('text/html');
            $success = $this->getMailer()->send($message);
            if($uccess == 0){
                $communication = new Communication();

                if(!in_array($liste_ids[$i], $ids_groupes)){
                    $communication->setIdContact($liste_ids[$i]);
                }else{
                    $communication->setIdGroupe($liste_ids[$i]);
                }
                $communication->setType('E-mail');
                $communication->setObjet($courrier_electronique->getObjet());
                $communication->setCommentaire('Courrier envoyé depuis l\'application');
                $communication->setDate(date('Y-m-d'));

                $communication->save();
            }

        }
    }
}